//Symbol函数可以接受一个字符串作为参数，表示对Symbol实例的描述，主要是为了在控制台显示，
// 或者转为字符串时，比较容易区分
var s1 = Symbol('foo');
var s2 = Symbol('bar');

console.log(s1); // Symbol(foo)
console.log(s2); // Symbol(bar)

//Symbol.for()与Symbol()这两种写法，都会生成新的Symbol。它们的区别是，
// 前者会被登记在全局环境中供搜索，后者不会
var s3 = Symbol.for('foo');
var s4 = Symbol.for('foo');
var s5 = Symbol('foo');

console.log(s1 === s5); // false
console.log(s3 === s4); // true
console.log(s1 === s3); // false


var mySymbol = Symbol();
var a = {};
a.mySymbol = 'Hello!';
console.log(a[mySymbol]); // undefined
console.log(a['mySymbol']); // "Hello!"


//Symbol 作为属性名，该属性不会出现在for...in、for...of循环中，也不会被Object.keys()、
// Object.getOwnPropertyNames()、JSON.stringify()返回
var obj = {};
var a = Symbol('a');
var b = Symbol('b');
obj[a] = 'Hello';
obj[b] = 'World';

var objectSymbols = Object.getOwnPropertySymbols(obj);
console.log(objectSymbols); // [Symbol(a), Symbol(b)]



